const mgModel = require('../model/managerModel.js');
const verify = require('../config/verify.js')
const url = require('url')
const md5Util = require('../config/md5Util.js')
const dateFormat = require('../config/dateFormat.js')


module.exports.login = (req, res) => {
	let {username,userpwd} = req.body;
	userpwd = md5Util.md5(md5Util.md5(username + md5Util.md5(userpwd)))
	let userInfo = [username, userpwd]
	mgModel.login(userInfo).then(result => {
		if (result.length > 0) {
			let sul = result[0];
			let token = verify.setToken(sul.mg_id, sul.role_id)
			res.send({
				"data": {
					"id": sul.mg_id,
					"rid": sul.role_id,
					"username": sul.mg_name,
					"mobile": sul.mg_mobile,
					"email": sul.mg_email,
					"token": token
				},
				"meta": {
					"msg": "登录成功",
					"status": 200
				}
			})
		} else {
			res.send({
				meta: {
					msg: '账户名或密码错误',
					status: 402
				}
			})
		}
	})
}

/* 
	按页获取用户的数据
 */
module.exports.getMgByPage = async (req, res) => {
	// 获取页面传递过来的信息，但get方法需要先解析url再使用
	//解析url
	let {
		query
	} = url.parse(req.url, true);
	let {
		querys,
		pagenum,
		pagesize
	} = query;
	//console.log(querys,pagenum,pagesize)
	pagenum = parseInt(pagenum);
	pagesize = parseInt(pagesize);
	//获得表中数据的条数
	let count = await mgModel.getMgCount(querys);
	count = count[0].cou;
	//计算总页码
	let totalPage = Math.ceil(count/pagesize);
	//计算起始下标
	let offset = (pagenum - 1) * pagesize;
	if (offset >= count) {
		offset = 0;
		pagenum = 1;
	}
	//定义给sql语句传的参数
	let queryInfo = [querys, offset, pagesize];
	let managers = await mgModel.getMgByQuerys(queryInfo)
	// console.log(managers)
	//响应
	let users = [];
	for (i in managers) {
		let manager = managers[i];
		//获取角色名称，如果角色id的值为0，就把角色名称命名为超级管理员
		let roleName = manager.role_name;
		if (!manager.role_id) {
			roleName = '超级管理员'
		}
		users.push({
			"id": manager.mg_id,
			"username": manager.mg_name,
			"mobile": manager.mg_mobile,
			"type": 1,
			"email": manager.mg_email,
			"create_time": manager.mg_time,
			"mg_state": manager.mg_state == 1, // 当前用户的状态
			"role_name": roleName
		})
	}
	res.send({
		data: {
			'totalpage': totalPage,
			'pagenum': pagenum,
			'total': count,
			'users': users
		},
		meta: {
			msg: '用户列表获取成功',
			status: 200
		}
	})
}

// 添加用户
module.exports.addUser = async (req,res)=>{
	// 获取页面传递过来的信息，post方法直接获得
	let {username,userpwd,useremail,usermobile} = req.body;
	// 多层加密，让md5解析器，不能解析成功
	userpwd = md5Util.md5(md5Util.md5(username + md5Util.md5(userpwd)))
	// console.log(userpwd)
	// 创建给sql语句传参的数组
	let userInfo = [username,userpwd,dateFormat.DateFormat(),usermobile,useremail];
	
	let result = await mgModel.addUser(userInfo);
	if(result.affectedRows > 0){
		res.send({
			meta:{
				msg: '用户添加成功',
				status: 200
			}
		})
	}else{
		res.send({
			meta:{
				msg: '用户添加失败',
				status: 500
			}
		})
	}
}

// 改变用户的状态
module.exports.setMgState = async (req,res)=>{
	// 获得动态路由接收到的数据
	let {uid,stat} = req.params;
	if(stat == 'true'){
		stat = 1;
	}else{
		stat = 0;
	}
	// 创建为sql语句传参的数组
	let state = [stat,uid];
	let result = await mgModel.setState(state);
	if(result.affectedRows > 0){
		res.send({
			meta:{
				msg: '状态修改成功',
				status: 200
			}
		})
	}else{
		res.send({
			meta:{
				msg: '状态修改失败',
				status: 500
			}
		})
	}
}

// 编辑用户
module.exports.editUser = async (req,res)=>{
	let {userId,useremail,usermobile} = req.body;
	let editInfo = [useremail,usermobile,userId];
	
	let result = await mgModel.editUser(editInfo);
	if(result.affectedRows > 0){
		res.send({
			meta:{
				msg: '用户修改成功',
				status: 200
			}
		})
	}else{
		res.send({
			meta:{
				msg: '用户修改失败',
				status: 500
			}
		})
	}
}

// 删除用户
module.exports.delUser = async (req,res)=>{
	let {uid} = req.params;
	
	let result = await mgModel.delUser(uid);
	if(result.affectedRows > 0){
		res.send({
			meta:{
				msg: '用户删除成功',
				status: 200
			}
		})
	}else{
		res.send({
			meta:{
				msg: '用户删除失败',
				status: 500
			}
		})
	}
}

// 更改用户角色
module.exports.setMgRole = async (req,res)=>{
	// 获取动态路由接收到的参数
	let {rid,uid} = req.params;
	// 定义给sql语句传参的数组
	let mgInfo = [rid,uid];
	let result = await mgModel.setMgRole(mgInfo);
	if(result.affectedRows > 0){
		res.send({
			meta:{
				msg: '权限修改成功',
				status: 200
			}
		})
	}else{
		res.send({
			meta:{
				msg: '权限修改失败',
				status: 500
			}
		})
	}
}